package com.superdry.main;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

import com.ab.activity.AbActivity;
import com.drysurper.R;
import com.superdry.fragment.Fragment_Dry;
import com.superdry.fragment.Fragment_Me;
import com.superdry.fragment.Fragment_Order;
import com.superdry.global.SApplication;
import com.superdry.utils.GlobalConst;
import com.superdry.utils.ToastHelper;

/**
 * 项目的主Activity，所有的Fragment都嵌入在这里。
 */
public class MainActivity extends Activity implements OnClickListener {

	/**
	 * 用于展示 洗衣的Fragment
	 */
	private Fragment_Dry fragment_dry;

	/**
	 * 用于展示订单的Fragment
	 */
	private Fragment_Order fragment_order;

	/**
	 * 用于展示个人中心的Fragment
	 */
	private Fragment_Me fragment_me;

	/**
	 * 洗衣界面布局
	 */
	private View dryLayout;

	/**
	 * 订单界面布局
	 */
	private View orderLayout;

	/**
	 * 个人中心界面布局
	 */
	private View meLayout;

	/**
	 * 在Tab布局上显示洗衣图标的控件
	 */
	private ImageView dryImage;

	/**
	 * 在Tab布局上显示订单图标的控件
	 */
	private ImageView orderImage;

	/**
	 * 在Tab布局上显示个人中心图标的控件
	 */
	private ImageView meImage;

	/**
	 * 用于对Fragment进行管理
	 */
	private FragmentManager fragmentManager;
	/**
	 * 点击两次退出
	 */
	private boolean isExit;
	Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			isExit = false;
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 初始化布局元素
		initViews();
		fragmentManager = getFragmentManager();

		int cmd = getIntent().getIntExtra("cmd", -1);
		if (GlobalConst.SHOW_ORDER_FRAGMENT == cmd) {
			// 显示第二个fragment
			setTabSelection(1);
		} else {
			// 第一次启动时选中第0个tab
			setTabSelection(0);

		}

		SApplication.getInstance().addActivity(this);
	}

	/**
	 * 在这里获取到每个需要用到的控件的实例，并给它们设置好必要的点击事件。
	 */
	private void initViews() {

		dryLayout = findViewById(R.id.superdry_dry);
		orderLayout = findViewById(R.id.superdry_order);
		meLayout = findViewById(R.id.superdry_me);

		dryImage = (ImageView) findViewById(R.id.dry_image);
		orderImage = (ImageView) findViewById(R.id.order_image);
		meImage = (ImageView) findViewById(R.id.me_image);

		dryLayout.setOnClickListener(this);
		orderLayout.setOnClickListener(this);
		meLayout.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {

		switch (v.getId()) {
		case R.id.superdry_dry:
			setTabSelection(0);
			break;
		case R.id.superdry_order:
			setTabSelection(1);
			break;
		case R.id.superdry_me:
			setTabSelection(2);
			break;

		default:
			break;
		}
	}

	/**
	 * 根据传入的index参数来设置选中的tab页。
	 * 
	 * @param index
	 *            每个tab页对应的下标。0表示消息，1表示联系人，2表示动态，3表示设置。
	 */
	private void setTabSelection(int index) {
		// 每次选中之前先清楚掉上次的选中状态
		clearSelection();
		// 开启一个Fragment事务
		FragmentTransaction transaction = fragmentManager.beginTransaction();
		// 先隐藏掉所有的Fragment，以防止有多个Fragment显示在界面上的情况
		hideFragments(transaction);
		switch (index) {
		case 0:
			// 当点击了消息tab时，改变控件的图片和文字颜色
			dryImage.setImageResource(R.drawable.superdry_dry_selected);
			if (fragment_dry == null) {
				// 如果Fragment_Dry为空，则创建一个并添加到界面上
				fragment_dry = new Fragment_Dry();
				transaction.add(R.id.content, fragment_dry);
			} else {
				// 如果Fragment_Dry不为空，则直接将它显示出来
				transaction.show(fragment_dry);
			}
			break;
		case 1:
			// 当点击了联系人tab时，改变控件的图片和文字颜色
			orderImage.setImageResource(R.drawable.superdry_order_selected);
			if (fragment_order == null) {
				// 如果Fragment_Order为空，则创建一个并添加到界面上
				fragment_order = new Fragment_Order();
				transaction.add(R.id.content, fragment_order);
			} else {
				// 如果Fragment_Order不为空，则直接将它显示出来
				transaction.show(fragment_order);
			}
			break;
		case 2:
			// 当点击了动态tab时，改变控件的图片和文字颜色
			meImage.setImageResource(R.drawable.superdry_me_selected);
			if (fragment_me == null) {
				// 如果Fragment_Me为空，则创建一个并添加到界面上
				fragment_me = new Fragment_Me();
				transaction.add(R.id.content, fragment_me);
			} else {
				// 如果Fragment_Me不为空，则直接将它显示出来
				transaction.show(fragment_me);
			}
			break;
		default:
			break;
		}
		transaction.commit();
	}

	/**
	 * 清除掉所有的选中状态。
	 */
	private void clearSelection() {
		dryImage.setImageResource(R.drawable.superdry_dry_unselected);
		orderImage.setImageResource(R.drawable.superdry_order_unselected);
		meImage.setImageResource(R.drawable.superdry_me_unselected);
	}

	/**
	 * 将所有的Fragment都置为隐藏状态。
	 * 
	 * @param transaction
	 *            用于对Fragment执行操作的事务
	 */
	private void hideFragments(FragmentTransaction transaction) {
		if (fragment_dry != null) {
			transaction.hide(fragment_dry);
		}
		if (fragment_me != null) {
			transaction.hide(fragment_me);
		}
		if (fragment_order != null) {
			transaction.hide(fragment_order);
		}
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			exit();
			return false;
		} else {
			return super.onKeyDown(keyCode, event);
		}
	}

	public void exit() {
		if (!isExit) {
			isExit = true;
			ToastHelper.show(this, "再按一次退出程序");
			mHandler.sendEmptyMessageDelayed(0, 2000);
		} else {
			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.addCategory(Intent.CATEGORY_HOME);
			startActivity(intent);
			SApplication.getInstance().exit();
			System.exit(0);
		}
	}

	@Override
	public void onBackPressed() {

	}
}
